﻿<UserControl
    x:Class="MvvmNavigation.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"
    
    >
    
    <!-- STEP 2a: Add MainPageViewModel as a resource -->
    <UserControl.Resources>
        <my:MainPageViewModel x:Key="vm" xmlns:my="clr-namespace:MvvmNavigation"/>
    </UserControl.Resources>

    <!-- STEP 2b: Set the DataContext of the Grid to the vm static resource -->
    <Grid x:Name="LayoutRoot" Style="{StaticResource LayoutRootGridStyle}"
          DataContext="{StaticResource vm}">

        <Border x:Name="ContentBorder" Style="{StaticResource ContentBorderStyle}">

            <!-- STEP 2c: Bind the Source property of navigation:Frame to the SelectedPage property -->
            <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" 
                Source="{Binding Path=SelectedPage, Mode=TwoWay}" 
                Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
                <navigation:Frame.UriMapper>
                  <uriMapper:UriMapper>
                    <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
                    <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
                  </uriMapper:UriMapper>
                </navigation:Frame.UriMapper>
            </navigation:Frame>
        </Border>

        <Grid x:Name="NavigationGrid" Style="{StaticResource NavigationGridStyle}">

            <Border x:Name="BrandingBorder" Style="{StaticResource BrandingBorderStyle}">
                <StackPanel x:Name="BrandingStackPanel" Style="{StaticResource BrandingStackPanelStyle}">

                    <ContentControl Style="{StaticResource LogoIcon}"/>
                    <TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" 
                               Text="Mvvm Navigation Sample"/>

                </StackPanel>
            </Border>

            <Border x:Name="LinksBorder" Style="{StaticResource LinksBorderStyle}">
                <StackPanel x:Name="LinksStackPanel" Style="{StaticResource LinksStackPanelStyle}">

                    <!-- Step 2d: Bind Command to NavigateCommand -->
                    <!-- Set CommandParamter to view name (without .xaml) -->
                    <HyperlinkButton x:Name="homeLink" Style="{StaticResource LinkStyle}" 
                        Command="{Binding Path=NavigateCommand}" CommandParameter="Home" 
                        TargetName="ContentFrame" Content="home"/>
                                     
                    <Rectangle x:Name="Divider1" Style="{StaticResource DividerStyle}"/>
                    
                    <HyperlinkButton x:Name="aboutLink" Style="{StaticResource LinkStyle}" 
                        Command="{Binding Path=NavigateCommand}" CommandParameter="About"
                        TargetName="ContentFrame" Content="about"/>

                    <Rectangle x:Name="Divider2" Style="{StaticResource DividerStyle}"/>

                    <HyperlinkButton x:Name="customerLink" Style="{StaticResource LinkStyle}" 
                        Command="{Binding Path=NavigateCommand}" CommandParameter="CustomerView"
                        TargetName="ContentFrame" Content="customer"/>

                </StackPanel>
            </Border>

        </Grid>

    </Grid>

</UserControl>